package com.shrct.businessprocess.product;

import com.shrct.businessprocess.product.RCActualServicePurchased;
import com.shrct.businessprocess.product.RCCompanyServiceEntry;
import com.shrct.businessprocess.product.RCFullServiceProductEntry;
import com.shrct.businessprocess.product.RCIdentifiablePhysicalProductEntry;
import com.shrct.businessprocess.product.RCProductServiceStatus;
import com.shrct.businessprocess.product.impl.RCProductServiceTracerImpl;
import com.shrct.businessprocess.product.proxy.RCProductServiceTracerProxy;
import com.shrct.businessprocess.purchase.RCBudgetContract;
import com.shrct.businessprocess.purchase.RCHasPurchaseBudget;
import edu.fudan.mylang.pf.EntityImplementation;
import edu.fudan.mylang.pf.IModelObject;
import java.util.Collection;
import java.util.Date;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@EntityImplementation(implementBy = RCProductServiceTracerImpl.class)
public interface RCProductServiceTracer extends IModelObject {
  public abstract RCBudgetContract getBudgetContract();
  
  public abstract RCProductServiceTracer setBudgetContract(final RCBudgetContract budgetContract);
  
  public abstract RCCompanyServiceEntry getCompanyService();
  
  public abstract RCProductServiceTracer setCompanyService(final RCCompanyServiceEntry companyService);
  
  public abstract RCIdentifiablePhysicalProductEntry getProduct();
  
  public abstract RCProductServiceTracer setProduct(final RCIdentifiablePhysicalProductEntry product);
  
  public abstract Collection<RCActualServicePurchased> getPurchased();
  
  public abstract RCActualServicePurchased createAndAddtoPurchased();
  
  public abstract RCActualServicePurchased createAndAddtoPurchased(final Procedure1<RCActualServicePurchased> updater);
  
  public abstract RCProductServiceTracer removeFromPurchased(final RCActualServicePurchased rCActualServicePurchased);
  
  public abstract RCProductServiceTracer removeAllPurchased();
  
  public abstract RCHasPurchaseBudget getBudget();
  
  public abstract Date getSupplierToDate();
  
  public abstract RCProductServiceStatus getStatus();
  
  public abstract Boolean needAdditionalPurchase();
  
  public abstract void serviceImported(final RCFullServiceProductEntry fullService);
  
  public abstract RCProductServiceTracerProxy toProxy();
}
